// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLHint;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr_ptr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "SQLTableSourceImpl.h"
#include "../../../utils/common_ptr.h"

class SQLLateralViewTableSource : public SQLTableSourceImpl
{
public:
  SQLTableSource_ptr tableSource;
  BOOL_ptr outer;

  SQLMethodInvokeExpr_ptr method;

  SQLName_list_ptr columns;

  SQLExpr_ptr on; // odps

  SQLLateralViewTableSource();
  SHAREDOBJECT(SQLLateralViewTableSource);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLTableSource_ptr getTableSource();

  void setTableSource(SQLTableSource_ptr tableSource);

  SQLMethodInvokeExpr_ptr getMethod();

  void setMethod(SQLMethodInvokeExpr_ptr method);

  SQLName_list_ptr getColumns();

  void setColumns(SQLName_list_ptr columns);

  SQLTableSource_ptr findTableSource(long alias_hash);

  SQLTableSource_ptr findTableSourceWithColumn(long columnNameHash, string_ptr columnName, int option);

  // @Override
  SQLObject_ptr clone();

  BOOL_ptr isOuter();

  void setOuter(BOOL_ptr outer);

  SQLExpr_ptr getOn();

  void setOn(SQLExpr_ptr on);
};
